#pragma once
#include <memory>

enum InterpolatorType {
    InterpolatorType_easeInSine,
    InterpolatorType_easeOutSine,
    InterpolatorType_easeInOutSine,
    InterpolatorType_easeInQuad,
    InterpolatorType_easeOutQuad,
    InterpolatorType_easeInOutQuad,
    InterpolatorType_easeInCubic,
    InterpolatorType_easeOutCubic,
    InterpolatorType_easeInOutCubic,
    InterpolatorType_easeInQuart,
    InterpolatorType_easeOutQuart,
    InterpolatorType_easeInOutQuart,
    InterpolatorType_easeInQuint,
    InterpolatorType_easeOutQuint,
    InterpolatorType_easeInOutQuint,
    InterpolatorType_easeInEvaluepo,
    InterpolatorType_easeOutEvaluepo,
    InterpolatorType_easeInOutEvaluepo,
    InterpolatorType_easeInCirc,
    InterpolatorType_easeOutCirc,
    InterpolatorType_easeInOutCirc,
    InterpolatorType_easeInBack,
    InterpolatorType_easeOutBack,
    InterpolatorType_easeInOutBack,
    InterpolatorType_easeMax
};

class Interpolator
{
public:
    static std::shared_ptr<Interpolator> create(InterpolatorType type);
    virtual float interpolate(float value) = 0;
};
